<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Register extends TT_Controller {
	public function index() {	
		$this->load->helper('form');
		$this->load->model('register_model');
		$this->load->library('session');
		
		$this->output->set_header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
		$this->output->set_header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
		$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate"); 
		$this->output->set_header("Cache-Control: post-check=0, pre-check=0", false);
		$this->output->set_header("Pragma: no-cache");
		
		if($this->session->userdata('register') != NULL && $this->session->userdata('register') == 'done')
			$this->template->build('register_complete');
		else if($this->input->post('register') == NULL) {
			$this->template->build('register_form');
		}
		else $this->add_customer(); // validate user input and then add customer
	}
	
	
	/*
	function to get captcha image and access code
	access code will be stored in session
	*/
	public function get_captcha() {
		
		$this->output->set_header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
		$this->output->set_header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
		$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate"); 
		$this->output->set_header("Cache-Control: post-check=0, pre-check=0", false);
		$this->output->set_header("Pragma: no-cache");
		
		$this->load->library('session');
		$this->load->library('ttcaptcha');
		
		//create captcha
		$captcha = new Ttcaptcha();
		
		//set and store access code in session 
		$text = $captcha->create_text();
		$this->session->set_userdata(array('accesscode' => md5($text)));
		
		//get font and background to use in captcha image
		$font = BASEPATH . 'fonts/times_new_yorker.ttf';
		$background = base_url() . 'images/phpcaptcha/cap_bg.jpg';
		
		//show captcha image
		$captcha->create_image_captcha($text, $font, $background);
	}
	
	/*
	function to check access code from user input
	*/
	public function check_access_code() {
		$this->load->library('session');
		if($this->session->userdata('accesscode') != NULL 
			&& $this->input->post('accesscode') != NULL)
			echo md5($_POST['accesscode']) == $this->session->userdata('accesscode') ? 'right' : 'wrong';
	}
	
	/*
	public function activate($email, $key) {
		$this->load->model('register_model');
		$result = $this->register_model->activate_email(urldecode($email), $key);
		$this->template->build('activate_message', array('result' => $result));
	}
	*/
	/********************************** Private Function **********************************/
	/*
	Function to add customer
	Before insert customer information into database,
	it will validate input values
	if everything is ok, customer information will be inserted into database
	*/
	private function add_customer() {
		$errors = array();
		$data = $this->validate_register_form($errors);
		if(count($errors) == 0) {
			//$key = $this->generate_activation_key();
			//$data[] = $key;
			
			// send a message to customer's mail
			$this->send_mail($data[0], $data[4], $data[6], $data[5]);
			
			$result = $this->register_model->insert_customer($data);
			
			switch($result) {
				case Register_Model::SUCCESS :
					$this->session->set_userdata('register', 'done');
					$this->template->build('register_complete', array('fullname' => $data[0]));
					return;
				case Register_Model::FAILURE :
					$errors['email'] = 'Email này đã được đăng ký bởi người khác';
					$errors['username'] = 'Tên đăng nhập này đã có người khác sử dụng';
					break;
				case Register_Model::EMAIL_EXISTED :
					$errors['email'] = 'Email này đã được đăng ký bởi người khác';
					break;
				case Register_Model::USERNAME_EXISTED :
					$errors['username'] = 'Tên đăng nhập này đã có người khác sử dụng';
					break;
				default: 
					$this->template->build('register_failed');
					return;
				}	
			$this->template->build('register_form', array('errors' => $errors));
		}
		else $this->template->build('register_form', array('errors' => $errors));		
	}
	
	private function send_mail($name, $email, $username, $password) {
		//smtp.gmail.com ssl://smtp.googlemail.com
		$config = array(
			'protocol' => 'smtp',
			'smtp_host' => 'ssl://smtp.gmail.com',
			'smtp_port' => '465',
			'smtp_user' => 'vietthanh.caosugiong.net@gmail.com',
			'smtp_pass' => '&bancaosu31052012?',
			'mailtype' => 'html',
			'charset' => 'utf-8'
		);
		$mess = '<h1>Xác nhận tham gia webiste raobanoto.com</h1>';
		$mess .= '<h2>Cảm ơn bạn ' . $name . ' đã đăng ký vào website của chúng tôi</h2>';
		$mess .= '<p>Sau đây là thông tin đăng nhập của bạn:<br/>';
		$mess .= 'Tên đăng nhập: ' . $username . '<br/>';
		$mess .= 'Mật khẩu: ' . $password . '</p>';
		//$mess .= '<p>Bạn vui lòng click vào link này để hoàn tất việc đăng ký:<br/>';
		//$mess .= '<a href="http://vietthanh.caosugiong.net/oto/register/activate/' 
			//. urlencode($email) . '/' . $key . '">Kích hoạt tài khoản</a>' ;
		
		$this->load->library('email', $config);
		$this->email->set_newline("\r\n");
		$this->email->to($email);
		$this->email->from('vietthanh.caosugiong.net@gmail.com', 'Việt Thành');
		$this->email->subject('Email Test');
		$this->email->message($mess);
		
		$this->email->send();
		/*if(!$this->email->send()) {
			//echo 'Send mail thất bại.';
			echo $this->email->print_debugger();
			exit();			
		}*/
	}
	
	/*
	create an activation key
	*/
	/*private function generate_activation_key() {
		$str = 'qazwsxedcrfvtgbyhnujmikolpQWERTYUIOPASDFGHJKLZXCVBNM7894561230';
		return str_shuffle($str);
	}*/
	
	/*
	validate register input from the user
	it will return errors and the array of data
	*/
	private function validate_register_form(&$errors) {
		$this->load->library('session');
		$this->load->library('ttvalidation');
		$validation = new Ttvalidation();
		
		//get user input
		$fullname = $validation->prepare_string($this->input->post('fullname'));
		$gender = $validation->prepare_string($this->input->post('gender'));
		$address = $validation->prepare_string($this->input->post('address'));
		$phone = $validation->prepare_string($this->input->post('phone'));
		$email = $validation->prepare_string($this->input->post('email'));
		$username = $validation->prepare_string($this->input->post('username'));
		$password = $validation->prepare_string($this->input->post('password'));
		$repassword = $validation->prepare_string($this->input->post('repassword'));
		$accesscode = $validation->prepare_string($this->input->post('accesscode'));
		$province = $validation->prepare_string($this->input->post('province'));
		
		if(empty($fullname))
			$errors['fullname'] = 'Vui lòng nhập đầy đủ họ và tên';
		
		if(empty($email))
			$errors['email'] = 'Vui lòng nhập địa chỉ email';
		else if(!$validation->matches_email($email))
			$errors['email'] = 'Địa chỉ email không hợp lệ';
			
		if(empty($address))
			$errors['address'] = 'Vui lòng nhập địa chỉ liên lạc';
		
		if(empty($phone))
			$errors['phone'] = 'Vui lòng nhập số điện thoại';
		
		if(empty($username))
			$errors['username'] = 'Vui lòng nhập tên đăng nhập';
		
		if(empty($password))
			$errors['password'] = 'Vui lòng nhập mật khẩu';
		
		if(empty($repassword))
			$errors['repassword'] = 'Vui lòng nhập lại mật khẩu';
		else if($password != $repassword)
			$errors['repassword'] = 'Hai mật khẩu không khớp nhau';
		
		if(empty($accesscode))
			$errors['accesscode'] = ' Vui lòng nhập mã bảo vệ';
		else if(md5($accesscode) != $this->session->userdata('accesscode'))
			$errors['accesscode'] = ' Mã bảo vệ không đúng';
		
		return array($fullname, $gender, $address, $phone, $email, $password, $username, $province);
	}
}

/* End of file home.php */
/* Location: ./application/modules/register/controllers/register.php */